package ru.chaykin.primitives;

import java.util.List;


public class Primitives {
	public static final float[] getLineBuffer(float x0, float y0, float x1, float y1) {
		return new float[]{x0, y0, Point.z, x1, y1, Point.z};
	}
	
	public static float[] getBuffer(List<Point> pLine) {
		float[] pointsBuff = new float[3 * pLine.size()];
		for (int i = 0; i < pLine.size(); i++) {
			pointsBuff[3 * i] = pLine.get(i).getx();
			pointsBuff[3 * i + 1] = pLine.get(i).gety();
			pointsBuff[3 * i + 2] = Point.z;
		}
		return pointsBuff;
	}
	
	/**
	 * Возвращает окружность, описанную вокруг прямой
	 */
	public static final Circle getCircle(float x0, float y0, float x1, float y1) {
		float d = (float) Math.sqrt(Math.pow(x0 - x1, 2) + Math.pow(y0 - y1, 2));
		return new Circle((x0 + x1) / 2.0f, (y0 + y1) / 2.0f, d / 2.0f);
	}

	/**
	 * Возвращает окружность, описанную вокруг полилинии/полигона. Окружность не минимально возможная, зато просто и быстро считается
	 */
	public static final Circle getCircle(List<Point> pnts) {
		float minX = Float.MAX_VALUE;
		float minY = Float.MAX_VALUE;
		float maxX = Float.MIN_VALUE;
		float maxY = Float.MIN_VALUE;
		for (Point p : pnts) {
			if (p.getx() > maxX)
				maxX = p.getx();
			if (p.getx() < minX)
				minX = p.getx();
			if (p.gety() > maxY)
				maxY = p.gety();
			if (p.gety() < minY)
				minY = p.gety();
		}
		return getCircle(minX, minY, maxX, maxY);
	}
}
